package cn.line5.seam.db;

import java.sql.SQLException;

import cn.line5.seam.contexts.JdbcContext;
import cn.line5.seam.exception.DBException;

/**
 * <h1>查询执行工厂类</h1>
 * 
 * @author Liu,Xiaojun
 * @since JDK1.6
 */
public class QueryFactory {
	/**
	 * 创建查询器
	 * 
	 * @param queryString
	 *            SQL语句
	 * @return 查询接口
	 */
	public static Query createQuery(String queryString) {
		return new QueryImpl(queryString);
	}

	/**
	 * 创建查询器
	 * 
	 * @param queryString
	 *            SQL语句
	 * @param obj
	 *            条件对象，将根据SQL对应的:xxx调用条件对象对应的属性值
	 * @return 查询接口
	 */
	public static Query createQuery(String queryString, Object obj) {
		return new QueryImpl(queryString, obj);
	}

	/**
	 * 创建执行器
	 * 
	 * @param queryString
	 *            SQL语句
	 * @return 查询接口
	 */
	public static Query createExecute(String queryString) {
		return new ExecuteImpl(queryString);
	}

	/**
	 * 创建执行器
	 * 
	 * @param queryString
	 *            SQL语句
	 * @param obj
	 *            条件对象，将根据SQL对应的:xxx调用条件对象对应的属性值
	 * @return 查询接口
	 */
	public static Query createExecute(String queryString, Object obj) {
		return new ExecuteImpl(queryString, obj);
	}

	/**
	 * 数据库提交操作
	 * 
	 * @throws DBException
	 *             提交异常
	 */
	public static void commit() throws DBException {
		try {
			JdbcContext.getConnection().commit();
		} catch (SQLException e) {
			throw new DBException("Can't commit.", e);
		}
	}
}